package com.fishingwithme.infrastructure.dtos;

import cn.fishingwithme.domain.spots.*;
import com.fishingwithme.domain.spots.*;
import com.fishingwithme.infrastructure.utils.CommonUtils;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.Data;

import java.util.Date;
import java.util.List;

/**
 * 钓点列表DTO
 */
@Data
public class SpotListDto {
    private Long id;

    /**
     * 钓点所属城市代码
     */
    private String cityCode;

    /**
     * 钓点所属城市
     */
    private String city;

    /**
     * 经度
     */
    private Double longitude;

    /**
     * 纬度
     */
    private Double latitude;

    /**
     * 钓点名
     */
    private String name;

    /**
     * 是否收费(0-否,1-是)
     */
    private Boolean isFree;

    /**
     * 是否秘密钓点(0-否,1-是)
     */
    private Boolean isPrivate;

    /**
     * 是否禁止钓鱼(0-否,1-是)
     */
    private Boolean isForbidden;

    /**
     * 水域类型
     */
    private WaterType waterType;

    /**
     * 钓点等级
     */
    private SpotLvl lvl;

    /**
     * 钓点类型
     */
    @JsonIgnore
    private String spotTypes;

    /**
     * 钓点鱼种
     */
    @JsonIgnore
    private String fishTypes;

    private List<ObjectNode> jsonSpotTypes;

    private List<ObjectNode> jsonFishTypes;

    /**
     * 是否停车方便(0-否,1-是)
     */
    private Boolean isParkingConvenient;

    /**
     * 停车距离
     */
    private ParkingDistance distance;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createdAt;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updatedAt;

    public SpotListDto format() {
        this.setJsonSpotTypes(CommonUtils.convert(this.getSpotTypes(), SpotType.class));
        this.setJsonFishTypes(CommonUtils.convert(this.getFishTypes(), FishType.class));
        return this;
    }
}